package com.hhqk.shiro;

import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.authc.credential.SimpleCredentialsMatcher;
import org.hhqk.common.Encrypt;


public class AuthCredential extends SimpleCredentialsMatcher{

	@Override
	public boolean doCredentialsMatch(AuthenticationToken token, AuthenticationInfo info) {
		//1.从token，拿出当前用户输入的用户名和密码
		//2.利用加密算法，把当前用户输入的密码进行加密，得到加密后的密码
		//3.把这个加密后的登录密码，再设置会token
		//4.把token info 交给super.doCredentialsMatch(token,info)
		//5.剩下的加密认证工作，就交给shiro来处理了
		
		UsernamePasswordToken loginToken=(UsernamePasswordToken) token;
		//得到用户输入的登录密码，注意：loginToken.getPassword()是一个char[],需要转成String
		String loginPassword=String.valueOf(loginToken.getPassword());
		//得到用户名，这个用户名当做加密的盐
		String username=loginToken.getUsername();
		//得到了加密后的登录密码
		String encryptLoginPassword=Encrypt.md5(loginPassword,username);
		
		//把加密后的登录密码设置会loginToken里
		loginToken.setPassword(encryptLoginPassword.toCharArray());
		//这一步，很关键。当前 loginToken里存的是加密后的登录密码。info里存的是用户的真实密码，
		//shiro就是通过这两个密码去比对的
		return super.doCredentialsMatch(loginToken, info);
	}
}
